package modules.cas.singleton2;

/**
 * 单例模式 - 懒汉式式
 *      存在问题， 单线程没有问题，多线程出现问题
 *      保证只初始化对象一次
 * @author shengren.yan
 * @create 2021-04-11
 */
public class Singleton2 {

    // 构造方法私有 ---
    private Singleton2() {
        System.out.println(Thread.currentThread().getName() + "执行");
    }

    private static Singleton2 LazyMan;
    // 如果对象存在就加载，平常不加载
    public static Singleton2 getInstance(){
        if (LazyMan==null){
            LazyMan = new Singleton2();
        }
        return LazyMan;
    }

    // 每次执行的结果不一样，理论上只私有化一次，每次执行的次数不一样
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            new Thread(()->{
                Singleton2.getInstance();
            },"线程"+i).start();
        }
    }
}
